/**
 * created by 小卷毛, 2020/12/23
 * Copyright (c) 2020, 416143467@qq.com All Rights Reserved.
 * #                   *********                            #
 * #                  ************                          #
 * #                  *************                         #
 * #                 **  ***********                        #
 * #                ***  ****** *****                       #
 * #                *** *******   ****                      #
 * #               ***  ********** ****                     #
 * #              ****  *********** ****                    #
 * #            *****   ***********  *****                  #
 * #           ******   *** ********   *****                #
 * #           *****   ***   ********   ******              #
 * #          ******   ***  ***********   ******            #
 * #         ******   **** **************  ******           #
 * #        *******  ********************* *******          #
 * #        *******  ******************************         #
 * #       *******  ****** ***************** *******        #
 * #       *******  ****** ****** *********   ******        #
 * #       *******    **  ******   ******     ******        #
 * #       *******        ******    *****     *****         #
 * #        ******        *****     *****     ****          #
 * #         *****        ****      *****     ***           #
 * #          *****       ***        ***      *             #
 * #            **       ****        ****                   #
 */
package com.sgcc.pda.mdrh.task.safe.oss;

import android.content.Context;
import android.util.Log;

import com.alibaba.sdk.android.oss.common.auth.OSSFederationCredentialProvider;
import com.alibaba.sdk.android.oss.common.auth.OSSFederationToken;
import com.sgcc.pda.mdrh.task.safe.util.HttpUtil;
import com.sgcc.pda.tools.SPUtils;
import com.sgcc.pda.web.impl.HttpCallbackInterface;

import org.json.JSONException;
import org.json.JSONObject;

/**
 * 描 述：
 * 作 者：小卷毛  2020-12-23 10:44
 * 修改描述：
 * 修 改 人：
 * 修改版本：
 */
public class OSSAuthCredentialsProvider extends OSSFederationCredentialProvider {

    private Context mContext;
    private AuthDecoder mDecoder;


    public OSSAuthCredentialsProvider(Context context) {
        this.mContext = context;
    }

    public void setDecoder(AuthDecoder decoder) {
        this.mDecoder = decoder;
    }

    @Override
    public OSSFederationToken getFederationToken() {
        final OSSFederationToken[] authToken = {null};
        // 通过服务端进行鉴权
        HttpUtil.getOSSTokenSync(
                mContext,
                new HttpCallbackInterface() {
                    @Override
                    public void httpSuccess(String result) {
                        try {
                            JSONObject obj = new JSONObject(result);
                            if (obj.has("RT_F")
                                    && "1".equals(obj.optString("RT_F"))) {
                                JSONObject jsonObj = obj.optJSONObject("DTS");

                                if (mDecoder != null
                                        && jsonObj != null)
                                    jsonObj = new JSONObject(mDecoder.decode(jsonObj.toString()));

                                // 保存图片上传模式
                                if (jsonObj != null
                                        && jsonObj.has("uploadWay")) {
                                    SPUtils.put("upload-mode", jsonObj.optString("uploadWay"));
                                }

                                // STS鉴权Token
                                if (jsonObj != null
                                        && jsonObj.has("accesskeyId")
                                        && jsonObj.has("accesskeySecret")
                                        && jsonObj.has("securityToken")
                                        && jsonObj.has("expiration")
                                ) {
                                    authToken[0] = new OSSFederationToken(
                                            jsonObj.optString("accesskeyId"),
                                            jsonObj.optString("accesskeySecret"),
                                            jsonObj.optString("securityToken"),
                                            jsonObj.optString("expiration")
                                    );

                                    Log.i("auth-OSSToken:", authToken[0].toString());
                                }
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }

                    @Override
                    public void httpFailed(int errorCode, String errorMsg) {
                        Log.e("auth-OSSToken:", errorCode + "：" + errorMsg);
                    }
                }
        );

        return authToken[0];
    }

    interface AuthDecoder {
        String decode(String data);
    }

}
